import {Directive, DirectiveBinding} from "vue";

const datas = {}
const testdisabled = (parasmt, tmp, dataArr) => {
    const data = datas[parasmt.id];
    tmp.i++
    if (parasmt.Fn && data.length - 1 === parasmt.index) {

        parasmt.Fn(parasmt.index)
        //下一行的第一个聚焦 宏线程触发
        setTimeout(() => {
            const name = Object.keys(data[data.length - 1])[0]
            data[data.length - 1][name].querySelector('input').focus();
            return;
        }, 0);
    } else if (parasmt.Fn && data.length - 1 !== parasmt.index) {
        const elm = data[parasmt.index + 1][dataArr[0]] && data[parasmt.index + 1][dataArr[0]].querySelector('input')
        elm.focus()
        elm.select() //选中
    } else {
        const elm = data[parasmt.index][dataArr[tmp.i]] && data[parasmt.index][dataArr[tmp.i]].querySelector('input')
        if (elm.attributes.disabled) {
            //碰到禁用就回调重新开始
            testdisabled(parasmt, tmp, dataArr)
        } else {
            // const Fn = ()=>{
            elm.select ? elm.select() : elm.focus()
            // }
            // setTimeout(() => {
            //     if(parasmt.cellback && typeof parasmt.cellback.cb !='function'){
            //         Promise.resolve().then(Fn)

            //     }else if(parasmt.cellback && typeof parasmt.cellback.cb =='function'){
            //         return
            //     }else{
            //         Promise.resolve().then(Fn)
            //     }
            // }, 0);
        }
    }

}
//回车事件
export const keyupEnter: Directive = ({
    updated(el) {
        const parasmt = arguments[1].value;
        if (!datas[parasmt.id]) {
            datas[parasmt.id] = []
        }
        if (!datas[parasmt.id][parasmt.index]) datas[parasmt.id].push(parasmt)
        datas[parasmt.id][parasmt.index][parasmt.name] = el;
        el.addEventListener('keyup', (event) => {
            if (event.key == "Enter") {
                const datasArr = Object.keys(datas[parasmt.id][parasmt.index])
                datasArr.forEach((item, index) => {
                    if (item == parasmt.name) {
                        const tmp = {i: index}
                        testdisabled(parasmt, tmp, datasArr)
                    }
                })
            }
        }, false)
    },
    unmounted: function () {
        datas[arguments[1].value.id].splice(arguments[1].value.index)
    }
})
